Re: ISOLATION LEVEL SERIALIZABLE - Mailing list pgsql-general

From power2themacs
Subject Re: ISOLATION LEVEL SERIALIZABLE
Date
Msg-id a05101411b8c67c36aced@[128.2.161.124]
Whole thread Raw
In response to Re: ISOLATION LEVEL SERIALIZABLE  (Darren Ferguson <darren@crystalballinc.com>)
Responses Re: ISOLATION LEVEL SERIALIZABLE
Re: ISOLATION LEVEL SERIALIZABLE
Re: ISOLATION LEVEL SERIALIZABLE
List pgsql-general
>In table two you would not create a serial instead you would create an
>INTEGER because serial is a counter and the values in table 2 may not be
>in table 1.
>
>Use a transaction like as follows
>
>BEGIN;
>INSERT INTO TABLE1 VALUES (Whatever values);
>var = SELECT CURRVAL('sequence_name');
>INSERT INTO TABLE2 VALUES (var,whatever else);
>COMMIT;
>

But this is the race condition I am trying to avoid. Someone can
insert before I get the currval and it will beincremented and this
will result in invalid data. Right now, I'm doing exactly that but I
add SET ISOLATION LEVEL SERIALIZABLE; after the transaction which
locks out other INSERTS. I think I'll try PG Explorer's idea. Thanks
PG Explorer!

>So you would start the transaction then insert into the first table.
>You would then get the current value of the sequence that the first table
>created.
>You would then insert this value into table2 along with anything else
>
>HTH
>Darren Ferguson
>
>On Tue, 26 Mar 2002, power2themacs wrote:
>
>>  I am using 7.2 and JDBC. I have a very simple situation where I
>>  insert an item with a primary key which is a SERIAL. In the same
>>  transaction I need to insert a reference in a separate table to this
>>  item. Of course, race conditions could occur if I didn't use this
>>  special isolation level. But is there no way in which I could use
>>  row-level locking instead? Certainly, I am not updating the table I
>>  just inserted to, so the FOR UPDATE would never unlock. Is the
>>  isolation level my only option? I noticed that psql displays the oid
>>  after an INSERT. That would be exactly what I need but JDBC doesn't
>>  seem to offer this.
>>
>>  (Right now I set the isolation level and just get the SERIAL's
>>current value.)
>>
>>  |---table1----------------|   |---table2-----------------|
>>  | id SERIAL PRIMARY KEY    |  | id SERIAL REFERNCES table1 |
>>
>>
>>  Short version:
>>  I just inserted into table1 and need these in the same transaction.
>>  How can I get the id I just inserted into table2? Thanks folks.
>>  --
>>  ><><><><><><><><><><><><
>>  power2themacs@yahoo.com
>>
>>  _________________________________________________________
>>  Do You Yahoo!?
>>  Get your free @yahoo.com address at http://mail.yahoo.com
>>
>>
>>  ---------------------------(end of broadcast)---------------------------
>  > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>  >


--
><><><><><><><><><><><><
AgentM
agentm@cmu.edu

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com


pgsql-general by date:

Previous
From: Darren Ferguson
Date:
Subject: Re: ISOLATION LEVEL SERIALIZABLE
Next
From: Doug McNaught
Date:
Subject: Re: ISOLATION LEVEL SERIALIZABLE